﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Libreria.DAL;

namespace Libreria.SIG.Modelo
{
    [CAD(true, CAD.TiposBD._SQLServer)]
    public class Pedido
    {
        // Atributo de abstracción
        private MOR accesoADatos;
        // Atributo de la clase
        private Int32? codigoVenta;
        private Int32? codigoMenu;
        private Int32? codigoReceta;

        //Constructores
        public Pedido()
        {
        }

        public Pedido(string cadenaDeConexion)
        {
            this.accesoADatos = MOR.Instance(cadenaDeConexion);
        }

        // Encapsulamiento de los atributos
        [Tipo(Tipo.TiposSQLServer._int, "codigoVenta", true, true)]
        public Int32? CodigoVenta
        {
            get { return codigoVenta; }
            set { codigoVenta = value; }
        }

        public Int32 CodigoVentaConvertido
        {
            get
            {
                Int32 cConvertido = 0;
                if (codigoVenta.ToString() != null)
                {
                    Int32.TryParse(codigoVenta.ToString(), out cConvertido);
                }
                return cConvertido;
            }
            set { codigoVenta = value; }
        }

        [Tipo(Tipo.TiposSQLServer._int, "codigoMenu", true, true)]
        public Int32? CodigoMenu
        {
            get { return codigoMenu; }
            set { codigoMenu = value; }
        }

        public Int32 CodigoMenuConvertido
        {
            get
            {
                Int32 cConvertido = 0;
                if (codigoMenu.ToString() != null)
                {
                    Int32.TryParse(codigoMenu.ToString(), out cConvertido);
                }
                return cConvertido;
            }
            set { codigoMenu = value; }
        }

        [Tipo(Tipo.TiposSQLServer._int, "codigoReceta", true, true)]
        public Int32? CodigoReceta
        {
            get { return codigoReceta; }
            set { codigoReceta = value; }
        }

        public Int32 CodigoRecetaConvertido
        {
            get
            {
                Int32 cConvertido = 0;
                if (codigoReceta.ToString() != null)
                {
                    Int32.TryParse(codigoReceta.ToString(), out cConvertido);
                }
                return cConvertido;
            }
            set { codigoReceta = value; }
        }

        // Métodos de abstracción de datos
        public void crear()
        {
            this.accesoADatos.crearRegistro(this);
        }

        public List<Pedido> consultar()
        {
            List<Object> registros = this.accesoADatos.consultarRegistros(this, false);
            List<Pedido> resultado = new List<Pedido>();
            foreach (Object registro in registros)
            {
                resultado.Add((Pedido)registro);
            }
            return resultado;
        }

        public Pedido consultarPorCodigoVenta(Int32 codigoVenta)
        {
            this.CodigoVenta = codigoVenta;
            List<Object> registros = this.accesoADatos.consultarRegistros(this, true);
            Pedido resultado = null;
            if (registros != null)
            {
                if (registros.Count == 1)
                {
                    resultado = (Pedido)registros[0];
                }
            }
            return resultado;
        }

        public void actualizar()
        {
            this.accesoADatos.actualizarRegistro(this);
        }

        public void eliminar()
        {
            this.accesoADatos.borrarRegistro(this);
        }

    }
}
